<?php

namespace PHP;

/**
 * 此文件描述PHP的组成结构
 */
class PHP
{

	/**
	 * PHP的应用接口层
	 * 
	 * 它是PHP的宿主环境,它是整个PHP框架最外层的部分,主要负责PHP框架的初始化工作. 
	 *
	 * 它是进入PHP内部的入口,在不同场景下不同的实现,诸如 cli/fpm/embed 等.
	 *
	 * 不同的的实现虽然有些差异,但都是围绕PHP的生命周期来实现的
	 */
	const SAPI = [

			/*
			 * 独立的应用程序,定义有自己的main函数.是单进程模式,处理完请求后直接被关闭.
			 */
			'cli'	=> '/sapi/cli/php_cli.c',

			/*
			 * 独立的应用程序,定义有自己的main函数.是多进程模式,基于master/worker架构.
			 *  
			 */
			'fpm'	=> '/sapi/fpm/fpm/fpm_main.c'

		];


	/**
	 * 处于PHP应用和计算机之间,用于解释执行PHP代码
	 *
	 * 由两部分组成:
	 *
	 * 1. 编译器: 将PHP代码解释成执行器可识别的指令.
	 * 2. 执行器: 负责执行编译器解释出的指令.
	 * 
	 */
	const ZendVM = [
			'compiler'	=> '将PHP代码解释成执行器可识别的指令',
			'executor'	=> '负责执行编译器解释出的指令',
		];


	/**
	 * 扩展用于扩充框架功能的技术实现
	 *
	 * 可分为两个类型:
	 *
	 * 1. PHP扩展
	 * 2. Zend扩展: 主要应用于 ZendVM, 比如 opcache 扩展
	 * 
	 */
	const Extension = [
			'php'	=> 'PHP扩展',
			'zend'	=> '主要应用于 ZendVM'
		];


	/**
	 * 各部分组成的关系
	 */
	public static function relations()
	{
		/*
		userBrowser <-> sapi <-> main <-> zendVM['compiler'] + (zendVM['executor'] + Extension)
		*/
	}

}